
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>性能优化与瓶颈排查 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>性能优化与瓶颈排查 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">在性能优化中，通常需要确立哪些常见的性能目标？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">常见的性能目标包括：1. 降低响应时间，以提升用户操作的响应速度；2. 提高吞吐量，以增加系统能处理的请求数量；3. 减少资源消耗，以优化内存、CPU、磁盘等硬件资源的使用。</div>
          </div>
          <div class="card-source">来源: 文档中「1.1 确定性能目标」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">文档中提到了哪三种常见的硬件瓶颈及其典型原因？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">1. CPU瓶颈：通常由程序逻辑计算过于复杂或存在死循环引起。2. 内存瓶颈：内存占用过高导致频繁的垃圾回收或OOM错误。3. 磁盘瓶颈：由大量的文件读写或数据库的磁盘访问操作过多导致。</div>
          </div>
          <div class="card-source">来源: 文档中「2.1 硬件瓶颈」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">数据库为什么是应用中常见的性能瓶颈？请列举文档中提到的三个方面。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">数据库常见的瓶颈方面包括：1. 查询性能问题，如因缺乏索引或查询语句不优导致的查询过慢；2. 连接池瓶颈，连接池大小设置不合理导致请求排队；3. 锁竞争，高并发下数据库的锁机制成为瓶颈。</div>
          </div>
          <div class="card-source">来源: 文档中「2.3 数据库瓶颈」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">方法</div>
          <div class="card-question">在排查性能瓶颈时，可以使用哪些类型的监控工具？请分别举例说明。</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">方法</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">排查瓶颈时可使用三类监控工具：1. JVM监控工具，如 JConsole、VisualVM；2. 系统资源监控工具，如 top、htop；3. 数据库监控工具，如 MySQL 的慢查询日志。</div>
          </div>
          <div class="card-source">来源: 文档中「3.1 使用性能监控工具」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">针对数据库性能瓶颈，文档推荐了哪三种优化策略？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档推荐的数据库优化策略有：1. 索引优化，为频繁查询的字段创建索引；2. 查询优化，合理编写SQL，避免全表扫描；3. 数据库分区，对数据量大的表采用分区技术。</div>
          </div>
          <div class="card-source">来源: 文档中「4.2 数据库优化」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">为了优化内存使用和避免频繁的垃圾回收，可以采取哪些措施？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以采取两种主要措施：1. 对象池化，对于频繁使用的对象采用对象池来复用，减少内存分配和回收的开销；2. 垃圾回收调优，通过调整JVM的垃圾回收器和堆内存设置，减少GC的停顿时间。</div>
          </div>
          <div class="card-source">来源: 文档中「4.3 内存优化」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">除了硬件和数据库，代码层面本身可能存在哪些性能瓶颈？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">代码层面的常见瓶颈包括：1. 复杂算法，例如使用了时间复杂度过高的算法；2. 内存泄漏，频繁创建对象而不释放，增加GC负担；3. 线程同步问题，如线程间的锁竞争或死锁问题。</div>
          </div>
          <div class="card-source">来源: 文档中「2.4 代码瓶颈」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">方法</div>
          <div class="card-question">JMeter和Gatling这类工具在性能优化流程中扮演什么角色？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">方法</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">它们是压力测试（Stress Testing）和负载测试（Load Testing）工具，用于模拟高并发和高负载情况，通过分析系统的响应时间和吞吐量等表现来发现和定位性能瓶颈。</div>
          </div>
          <div class="card-source">来源: 文档中「3.4 压力测试与负载测试」部分</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">策略</div>
          <div class="card-question">在并发编程中，如何对多线程进行优化以提升系统性能？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">策略</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">文档提出了两种多线程优化方法：1. 使用线程池，通过线程池来管理线程，避免频繁创建和销毁线程带来的性能开销；2. 优化锁机制，减少锁的竞争，例如使用读写锁来提高并发性能。</div>
          </div>
          <div class="card-source">来源: 文档中「4.5 多线程优化」部分</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
